package com.wy.thread_pool.impl;

import java.util.concurrent.*;

/**
 *调试
 **/
public class Main {
    //准备一个任务-任务就是休眠15秒
    static class Task implements Runnable{

        @Override
        public void run() {
            try {
                TimeUnit.SECONDS.sleep(15);
            }catch (InterruptedException ignored){}
        }
    }
    static class MyThreadFactory implements ThreadFactory{

        @Override
        public Thread newThread(Runnable r) {
            return new Thread(r);
        }
    }
    public static void main(String[] args) {
        BlockingQueue<Runnable> workQueue=new ArrayBlockingQueue<>(5);
        //3个正式的，7个临时的，队列中还可以放5个——同时最多有15个任务执行
        //在15s(一个任务休眠15s)内提交第16个任务时就会出现拒绝服务
        MyThreadPoolExecutor executor=new MyThreadPoolExecutor(
                3,10,10, TimeUnit.SECONDS,
                workQueue,
                new MyThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
        );
//        for (int i = 0; i < 1000; i++) {  //当i==15时就会提交失败
//            System.out.println("提交任务"+i);
//            Task task=new Task();
//            executor.execute(task);
//            System.out.println("提交成功");
//        }

        for (int i = 0; i < 15; i++) {  //只提交15个
            //[0,1,2]交给正式员工在处理
            //[3,4,5,6,7]暂时放在队列中
            //[8,9,10,11,12,13,14]交给临时工处理
            //过了15s后，第一批任务执行结束
            //[0,1,2]、[8,9,10,11,12,13,14]执行结束
            //剩下的[3,4,5,6,7]任务具体怎么分配不确定，大概率是交给正式员工执行
            //即使是极端情况下，5个任务全给了临时工，也至少还有2个临时工没有工作,
            //再过10s，至少两个临时工要被解雇（临时工设置的是10s内没有工作会被解雇）【最多5个】
            System.out.println("提交任务"+i);
            Task task=new Task();
            executor.execute(task);
            System.out.println("提交成功");
        }
    }
}
